因为这三个题目比较简单,所以就一起放上来了。
题目
- 有序数组的平方
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
思路
这个挺简单的,就是从头开始求平方,然后插入进专门保存结果的vector里面。耗时之长,令人发指,看了别人排在前面的用时短的代码,
code
耗时最短。
class Solution {
static const int _ = []() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return 0;
}();
class Solution {
public:
vector
int size = A.size();
if(size==1)
return {A[0]*A[0]};
vector<int> res(size,0);
int pos = 0;
while(A[pos]<0)
{
A[pos] = -A[pos];
++pos;
}
int posForward = pos;
int posBackward = pos-1;
pos = 0;
while(posForward<size && posBackward>=0)
{
if(A[posForward] > A[posBackward])
{
res[pos++] = A[posBackward]*A[posBackward];
--posBackward;
}
else
{
res[pos++] = A[posForward]*A[posForward];
++posForward;
}
}
while(posForward<size)
{
res[pos++] = A[posForward]*A[posForward];
++posForward;
}
while(posBackward>=0)
{
res[pos++] = A[posBackward]*A[posBackward];
--posBackward;
}
return res;
}
};
我的
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
vector<int> res;
res.push_back(A[0]*A[0]);
int number=0;
int flag=0;
for(int i=1;i<A.size();i++)
{
flag=0;
number=A[i]*A[i];
for (int j=0;j<res.size();j++)
{
if (number<=res[j])
{
res.insert(res.begin()+j, number);
flag=1;
break;
}
}
if(flag==0)
res.push_back(number);
}
return res;
}
};
题目
- 不含 AAA 或 BBB 的字符串
给定两个整数 A 和 B,返回任意字符串 S,要求满足:
S 的长度为 A + B,且正好包含 A 个 ‘a’ 字母与 B 个 ‘b’ 字母;
子串 ‘aaa’ 没有出现在 S 中;
子串 ‘bbb’ 没有出现在 S 中。
示例 1:
输入:A = 1, B = 2
输出:”abb”
解释:”abb”, “bab” 和 “bba” 都是正确答案。
思路
感觉挺简单的,一看就懂了。
code
class Solution(object):
def strWithout3a3b(self, A, B):
"""
:type A: int
:type B: int
:rtype: str
"""
if A<3 and B<3:
return A*'a'+B*'b'
s=min(A,B)
l=max(A,B)
i=0
res=''
re=l-s-1
sum1=A+B
while(i<re):
if (A>B):
if(A>=2):
res=res+'aa'
A-=2
if(B>=1):
res=res+'b'
B-=1
i=i+1
continue
if(B>A):
if(B>=2):
res=res+'bb'
B-=2
if(A>=1):
res=res+'a'
A-=1
i=i+1
if(len(res)==(sum1)):
return res
while (A>0 and B>0):
res=res+'ab'
A=A-1
B=B-1
if (A>0 ):
res=res+A*'a'
if (B>0):
res=res+B*'b'
return res
题目
- 数组形式的整数加法
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
示例 1:
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234思路
先翻转整个vector,然后进行加法,在结束后再对k的值检查,直到为零,最后再次反转。
code
class Solution {
public:
vector<int> addToArrayForm(vector<int>& A, int K) {
int m=A.size();
reverse(A.begin(),A.end());
for(int i=0;i<m;i++)
{
K+=A[i];
A[i]=K%10;
K/=10;
}
while(K)
{
A.push_back(K%10);
K/=10;
}
reverse(A.begin(),A.end());
return A;
}
};